﻿// River Hopscotch POJ - 3258.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>


using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-3258

/*
奶牛们每年都会举办一次活动，内容是一种奇特的跳房子游戏，即在河中小心翼翼地从一块石头跳到另一块石头。
比赛在一条笔直的长河上进行，起点有一块石头，终点有另一块石头，距离起点 L 个单位（1 ≤ L ≤ 1,000,000,000）。
在起点和终点岩石之间的河道上，又出现了 N 块岩石（0 ≤ N ≤ 50,000），每块岩石与起点的距离都是一个整数 Di（0 < Di < L）。

玩游戏时，每头牛依次从起点岩石开始，努力到达终点岩石，只能从一个岩石跳到另一个岩石。
当然，不那么灵活的奶牛永远也到不了终点岩石，只能掉进河里。

农场主约翰为自己的奶牛感到骄傲，每年都会观看这项比赛。但随着时间的推移，他已经厌倦了看着其他农户的胆小的奶牛一瘸一拐地走过石头之间的短距离。
他计划移走几块石头，以增加奶牛跳到终点的最短距离。
他知道自己无法移走起点和终点的石头，但他计算出自己有足够的资源移走最多 M 块石头（0 ≤ M ≤ N）。

农夫约翰想知道，在他开始移走石头之前，*最短距离*能增加多少。
请帮助农场主约翰确定在移走最优的 M 组石块后，奶牛要跳过的最短距离。

输入
第 1 行 三个空格分隔的整数： L、N 和 M
第 2...N+1 行：每行包含一个整数，表示某块石头距离起始石头的距离。没有两块石头的位置相同。
输出
第 1 行： 一个整数，是奶牛移走 M 块石头后所需跳跃的最短距离的最大值
样本
输入复制 输出复制
25 5 2
2
14
11
21
17
4
提示
在移除任何石块之前，最短的跳跃是从 0（起点）跳 2 到 2。 
移除 2 和 14 处的石块后，所需的最短跳跃是跳 4（从 17 跳到 21 或从 21 跳到 25）。
*/

const int N = 50010;
int arr[N];
int L, n, m;

bool check(int x) {
	int rm = 0; int curr = 0;
	for (int i = 1; i <= n; i++) {
		if (arr[i] - curr < x) {
			rm++;
		}
		else {
			curr = arr[i];
		}
	}
	if (L - curr < x) {
		rm++;
	}

	return rm <= m;
}

void solve() {
	int l = 0; int r = L;
	while (l < r) {
		int mid = (l + r+1)>> 1;
		if (check(mid)) {
			l = mid;
		}
		else {
			r = mid -1 ;
		}
	}

	cout << l << endl;
}

int main()
{
	cin >> L >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
	}
	sort(arr+1,arr+1+n);
	solve();

	return 0;
}

 